package com.blog4j.article.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.blog4j.api.vo.ArticleDateCountVo;
import com.blog4j.api.vo.CategoryArticleCountVo;
import com.blog4j.api.vo.MonthActiveUserVo;
import com.blog4j.api.vo.MonthArticleViewsVo;
import com.blog4j.article.entity.ArticleEntity;
import com.blog4j.article.vo.req.ArticleListReqVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.HashSet;
import java.util.List;

/**
 * @author 98k灬
 * @version v1.0.0
 * @Description : 功能描述
 * @Create on : 2024/6/28 13:02
 **/
@Mapper
public interface ArticleMapper extends BaseMapper<ArticleEntity>  {
    /**
     * 获取普通用户的文章列表
     *
     * @param idSet 组织用户ID
     * @param status 状态
     * @param categoryId 文章分类ID
     * @param title 标题
     * @return 文章列表
     */
    List<ArticleEntity> getOrdinaryArticleList(@Param("idSet") HashSet<String> idSet,
                                               @Param("status") Integer status,
                                               @Param("categoryId") String categoryId,
                                               @Param("title") String title);

    /**
     * 获取创作者的文章列表，且该创作者没有加入任何组织
     *
     * @param status 状态
     * @param categoryId 文章分类ID
     * @param title 标题
     * @param userId 用户ID
     * @return 文章列表
     */
    List<ArticleEntity> getComposerArticleList1(@Param("status") Integer status,
                                                @Param("categoryId") String categoryId,
                                                @Param("title") String title,
                                                @Param("userId") String userId);

    /**
     * 获取创作者的文章列表，且该创作者加入了组织
     *
     * @param idSet 组织用户ID
     * @param status 状态
     * @param categoryId 文章分类ID
     * @param title 标题
     * @param userId 用户ID
     * @return 文章列表
     */
    List<ArticleEntity> getComposerArticleList2(@Param("idSet") HashSet<String> idSet,
                                                @Param("status") Integer status,
                                                @Param("categoryId") String categoryId,
                                                @Param("title") String title,
                                                @Param("userId") String userId);

    /**
     * 查询用户的收藏文章
     *
     * @param reqVo 请求信息
     * @return 收藏文章
     */
    List<ArticleEntity> getFavoriteArticleByUserId(@Param("userId") String userId);

    /**
     * 获取每天的文章数
     *
     * @return 每天的文章数
     */
    List<ArticleDateCountVo> getArticleDateCount();

    /**
     * 获取本月活跃用户列表
     *
     * @return 本月活跃用户列表
     */
    List<MonthActiveUserVo> getMonthActiveUserList();

    /**
     * 获取本月文章阅读量列表
     *
     * @return 本月文章阅读量列表
     */
    List<MonthArticleViewsVo> getMonthArticleViewsList();

    /**
     * 获取分类对应的文章数
     *
     * @return 分类对应的文章数
     */
    List<CategoryArticleCountVo> getCategoryArticleCount();

    /**
     * 查询已登录、加入了组织的用户，门户端的文章列表
     *
     * @param userId 用户ID
     * @param organizationUserIdList  该用户对应的所有组织下的所有成员用户ID集合
     * @return 文章列表
     */
    List<ArticleEntity> getArticleListUserJoinOrganization(@Param("userId") String userId,
                                                           @Param("organizationUserIdList") List<String> organizationUserIdList);

    /**
     * 获取推荐文章列表
     *
     * @param articleId 文章ID
     * @param categoryId 分类ID
     * @param labelId 标签ID
     * @param categoryName 分类名称
     * @param labelName 标签名称
     * @return 推荐文章列表
     */
    List<ArticleEntity> getRecommendArticleList(@Param("articleId") String articleId,
                                                @Param("categoryId") String categoryId,
                                                @Param("labelId") String labelId,
                                                @Param("categoryName") String categoryName,
                                                @Param("labelName") String labelName);
}
